﻿package com.firewolf.chars.utils;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Set;

public class CharSetUtil {
	/**
	 * 获取字符类型为charName的别名，如获取ISO-8859-1的别名
	 * @param charName
	 * @return
	 */
	public static Set<String> getCharOtherName(String charName){
		Charset cset = Charset.forName(charName);
		return cset.aliases();
	}
	
	/**
	 * 获取当前环境下所有的可用的字符集
	 * @return map中String表示字符名，Charset表示真实的字符
	 */
	public static Map<String, Charset> getAvilableChars(){
		return Charset.availableCharsets();
	}
	
	/**
	 * 使用charName编码方式来编码str，
	 * @param charName 字符类型
	 * @param str 要编码的字符串
	 * @return 字符数组
	 */
	public static byte[] encodeStrByOneChar(String charName,String str){
		Charset cset = Charset.forName(charName);
		ByteBuffer buffer = cset.encode(str);
		return buffer.array();
	}
	
	/**
	 * 使用charNmae字符类型来解码一个字节数组
	 * @param charName 字符编码
	 * @param bytes 要解码的字节数组
	 * @param offset 要解码的开始位置
	 * @param length 要解码的长度
	 * @return 解码后的字符串  
	 */
	public static String decodeBytesByOneChar(String charName,byte[] bytes,int offset,int length){
		ByteBuffer bBuffer = ByteBuffer.wrap(bytes,offset,length);
		Charset cset = Charset.forName(charName);
		CharBuffer cBuffer = cset.decode(bBuffer);
		return cBuffer.toString();
	}
}
